--- /dev/null
+program DOF2RC;\r
+uses\r
+ Windows, SysUtils, Inifiles;\r
+\r
+var\r
+ Ini: TInifile;\r
+ IFName: string;\r
+ OFName: string;\r
+ OFile: Text;\r
+ s: string;\r
+ i: Integer;\r
+\r
+ procedure WriteValue(const Key: string);\r
+ var\r
+ s: string;\r
+ begin\r
+ s := Ini.ReadString('Version Info Keys', Key, '');\r
+ WriteLn(OFile, #9#9'VALUE "', Key, '", "', s, '\0"');\r
+ end;\r
+\r
+begin\r
+ IFName := ChangeFileExt(ExpandFileName(ParamStr(1)), '.dof');\r
+ Ini := TIniFile.Create(IFName);\r
+ try\r
+ OFName := SysUtils.ChangeFileExt(Ini.FileName, '.rc');\r
+ if not Ini.SectionExists('Compiler') then\r
+ begin\r
+ WriteLn('Invalid DOF!');\r
+ Halt(1);\r
+ end;\r
+\r
+ System.Assign(OFile, OFName);\r
+{$I-}\r
+ System.Rewrite(OFile);\r
+{$I+}\r
+ if (IOResult <> 0) then\r
+ begin\r
+ Halt(1);\r
+ end;\r
+ try\r
+ s := SysUtils.ExtractFileName(Ini.FileName);\r
+ s := SysUtils.ChangeFileExt(s, '.ico');\r
+\r
+ System.WriteLn(OFile, 'MAINICON ICON "', s, '"');\r
+ System.WriteLn(OFile);\r
+\r
+ if not Ini.SectionExists('Version Info') then Exit;\r
+\r
+ WriteLn(OFile, '1 VERSIONINFO');\r
+ s := Ini.ReadString('Version Info', 'MajorVer', '0') + ',' +\r
+ Ini.ReadString('Version Info', 'MinorVer', '0') + ',' +\r
+ Ini.ReadString('Version Info', 'Release', '0') + ',' +\r
+ Ini.ReadString('Version Info', 'Build', '0');\r
+ WriteLn(OFile, 'FILEVERSION ', s);\r
+ WriteLn(OFile, 'PRODUCTVERSION ', s);\r
+ WriteLn(OFile, 'FILEOS 0x4');\r
+ WriteLn(OFile, 'FILETYPE 0x1');\r
+ WriteLn(OFile, 'FILESUBTYPE 0x0L');\r
+ WriteLn(OFile, 'FILEFLAGSMASK 0x3fL');\r
+\r
+ i := 0;\r
+ if (Ini.ReadInteger('Version Info', 'Debug', 0) <> 0) then i := 1;\r
+ if (Ini.ReadInteger('Version Info', 'PreRelease', 0) <> 0) then i := (i or 2);\r
+ if (Ini.ReadInteger('Version Info', 'Special', 0) <> 0) then i := (i or $20);\r
+ if (Ini.ReadInteger('Version Info', 'Private', 0) <> 0) then i := (i or 8);\r
+ if (i <> 0) then\r
+ WriteLn(OFile, 'FILEFLAGS ', SysUtils.Format('0x%2.2x', [i]));\r
+\r
+ WriteLn(OFile, '{');\r
+ WriteLn(OFile, 'BLOCK "StringFileInfo"');\r
+ WriteLn(OFile, '{');\r
+\r
+ if ini.SectionExists('Version Info Keys') then\r
+ begin\r
+ WriteLn(OFile, #9'BLOCK "040904E4"');\r
+ WriteLn(OFile, #9'{');\r
+ WriteValue('CompanyName');\r
+ WriteValue('FileDescription');\r
+ WriteValue('FileVersion');\r
+ WriteValue('InternalName');\r
+ WriteValue('LegalCopyright');\r
+ WriteValue('LegalTrademarks');\r
+ WriteValue('OriginalFilename');\r
+ WriteValue('ProductName');\r
+ WriteValue('ProductVersion');\r
+ WriteValue('Comments');\r
+ WriteLn(OFile, #9'}');\r
+ end;\r
+ WriteLn(OFile, '}');\r
+\r
+ WriteLn(OFile, 'BLOCK "VarFileInfo"');\r
+ WriteLn(OFile, '{');\r
+ WriteLn(OFile, #9'VALUE "Translation", ',\r
+ SysUtils.Format('0x%4.4x 0x%4.4x', [\r
+ Ini.ReadInteger('Version Info', 'Locale', 1033),\r
+ Ini.ReadInteger('Version Info', 'CodePage', 1252)]));\r
+ WriteLn(OFile, '}');\r
+ WriteLn(OFile, '}');\r
+\r
+\r
+ finally\r
+ System.Close(OFile);\r
+ end;\r
+ finally\r
+ ini.Free;\r
+ end;\r
+end.\r
+\r